/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.integrator.dao;

import br.com.integrator.Dvd;
import br.com.integrator.util.ConnectionFactory;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;



/**
 *
 * @author ed
 */
public class DvdDAORevImp implements DAODvd {

    private Connection conn;

    public DvdDAORevImp() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
        } catch (Exception e) {
            throw new Exception("Erro:" + ":\n" + e.getMessage());
        }
    }

    @Override
    public void salvar(Dvd dvd) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        if (dvd== null) 
            throw new Exception("O valor passado não pode ser nulo");

            try {
                String SQL = "INSERT INTO dvds(nome,autor, gravadora, edicao)" + "values(?,?,?,?)";
                conn = this.conn;
                ps = conn.prepareStatement(SQL);
                ps.setString(1, dvd.getNome());
                ps.setString(2, dvd.getAutor());
                ps.setString(3, dvd.getGravadora());
                ps.setDate(4, new java.sql.Date(dvd.getEdicao().getTime()));
                

                ps.executeUpdate();

            } catch (SQLException sqle) {

                throw new Exception("Erro ao inserir dados" + sqle);

            } finally {
                ConnectionFactory.closeConnection(conn, ps);
            }
        }
      
        
 

    @Override
    public void atualizar(Dvd dvd) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;


        if (dvd == null) {
            throw new Exception("O valor passado não pode ser nulo");
        }
        try {
            String SQL = "UPDATE dvds SET nome=?, " +  "autor=?, " + "gravadora=?, "
                    + "edicao=? "  + "where id=?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setString(1, dvd.getNome());
            ps.setString(2, dvd.getAutor());
            ps.setString(3, dvd.getGravadora());
            ps.setDate(4, new java.sql.Date(dvd.getEdicao().getTime()));            
            ps.setInt(5, dvd.getId());
            ps.executeUpdate();
        } catch (SQLException sqle) {
            throw new Exception("Erro ao atualizar dados: " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    @Override
    public List todosDvds() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            conn = this.conn;
            ps = conn.prepareStatement("select * from dvds order by id asc");
            rs = ps.executeQuery();
            List<Dvd> list = new ArrayList<Dvd>();
            while (rs.next()) {
                Integer id = rs.getInt(1);
                String nome = rs.getString(2);
                String autor = rs.getString(3);
                String gravadora = rs.getString(4);
                Date edicao = rs.getDate(5);
                                
                list.add(new Dvd(id, nome, autor, gravadora, edicao));
            }

            return list;

        } catch (SQLException sqle) {


            throw new Exception(sqle);

        } finally {


            ConnectionFactory.closeConnection(conn, ps, rs);


        }

    }

    @Override
    public Dvd procurarDvd(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            conn = this.conn;
            ps = conn.prepareStatement("select * from dvds where id=?");
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (!rs.next()) {
                throw new Exception("Não foi encontrado nenhum" + "registro com o ID:" + id);
            }
            String nome = rs.getString(2);
            String autor = rs.getString(3);
            String gravadora = rs.getString(4);
            Date edicao = rs.getDate(5);
            

            return new Dvd(id, nome, autor, gravadora, edicao);
        } catch (SQLException sqle) {
            throw new Exception(sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

    @Override
    public void excluir(Dvd dvd) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;

        if (dvd == null) {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try {
            conn = this.conn;
            ps = conn.prepareStatement("delete from dvds where id=?");
            ps.setInt(1, dvd.getId());
            ps.executeUpdate();

        } catch (SQLException sqle) {
            throw new Exception("Erro ao excluir dados:" + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

   
}


